home *** CD-ROM | disk | FTP | other *** search
/ InterCD 2000 September / september_2000.iso / intercd / root / ^Linux / cdrtools-1.10 / cdrecord / diskid.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-07-20  |  16.2 KB  |  496 lines

  1. /* @(#)diskid.c    1.28 00/07/20 Copyright 1998 J. Schilling */
  2. #ifndef lint
  3. static    char sccsid[] =
  4.     "@(#)diskid.c    1.28 00/07/20 Copyright 1998 J. Schilling";
  5. #endif
  6. /*
  7.  *    Disk Idientification Method
  8.  *
  9.  *    Copyright (c) 1998 J. Schilling
  10.  */
  11. /*
  12.  * This program is free software; you can redistribute it and/or modify
  13.  * it under the terms of the GNU General Public License as published by
  14.  * the Free Software Foundation; either version 2, or (at your option)
  15.  * any later version.
  16.  *
  17.  * This program is distributed in the hope that it will be useful,
  18.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  * GNU General Public License for more details.
  21.  *
  22.  * You should have received a copy of the GNU General Public License
  23.  * along with this program; see the file COPYING.  If not, write to
  24.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  25.  */
  26.  
  27. #include <mconfig.h>
  28.  
  29. #include <stdio.h>
  30. #include <standard.h>
  31. #include <sys/types.h>
  32. #include <utypes.h>
  33.  
  34. #include "cdrecord.h"
  35.  
  36. EXPORT    void    pr_manufacturer        __PR((msf_t *mp, BOOL rw, BOOL audio));
  37. LOCAL    struct disk_man * man_ptr    __PR((msf_t *mp));
  38. EXPORT    int    manufacturer_id        __PR((msf_t *mp));
  39. EXPORT    long    disk_rcap        __PR((msf_t *mp, long maxblock, BOOL rw, BOOL audio));
  40.  
  41. struct disk_man {
  42.     msf_t    mi_msf;
  43.     char    mi_num;
  44.     char    *mi_name;
  45. };
  46.  
  47. /*
  48.  * Illegal (old) Manufacturer.
  49.  */
  50. LOCAL    char    m_ill[]   = "Unknown old Manufacturer code";
  51. LOCAL    char    m_illrw[] = "Illegal Manufacturer code";
  52.  
  53. /*
  54.  * Permanent codes.
  55.  */
  56. LOCAL    char    m_kingpro[]    = "King Pro Mediatek Inc.";
  57. LOCAL    char    m_custpo[]    = "Customer Pressing Oosterhout";
  58. LOCAL    char    m_taeil[]    = "Taeil Media Co.,Ltd.";
  59. LOCAL    char    m_doremi[]    = "Doremi Media Co., Ltd.";
  60. LOCAL    char    m_xcitec[]    = "Xcitec Inc.";
  61. LOCAL    char    m_leaddata[]    = "Lead Data Inc.";
  62. LOCAL    char    m_fuji[]    = "FUJI Photo Film Co., Ltd.";
  63. LOCAL    char    m_hitachi[]    = "Hitachi Maxell, Ltd.";
  64. LOCAL    char    m_kodakjp[]    = "Kodak Japan Limited";
  65. LOCAL    char    m_mitsui[]    = "Mitsui Chemicals, Inc.";
  66. LOCAL    char    m_pioneer[]    = "Pioneer Video Corporation";
  67. LOCAL    char    m_plasmon[]    = "Plasmon Data systems Ltd.";
  68. LOCAL    char    m_princo[]    = "Princo Corporation";
  69. LOCAL    char    m_ricoh[]    = "Ricoh Company Limited";
  70. LOCAL    char    m_skc[]        = "SKC Co., Ltd.";
  71. LOCAL    char    m_tyuden[]    = "Taiyo Yuden Company Limited";
  72. LOCAL    char    m_tdk[]        = "TDK Corporation";
  73. LOCAL    char    m_mitsubishi[]    = "Mitsubishi Chemical Corporation";
  74. LOCAL    char    m_auvistar[]    = "Auvistar Industry Co.,Ltd.";
  75. LOCAL    char    m_gigastore[]    = "GIGASTORAGE CORPORATION";
  76. LOCAL    char    m_fornet[]    = "FORNET INTERNATIONAL PTE LTD.";
  77. LOCAL    char    m_cmc[]        = "CMC Magnetics Corporation";
  78. LOCAL    char    m_odm[]        = "Optical Disc Manufacturing Equipment";
  79. LOCAL    char    m_ritek[]    = "Ritek Co.";
  80.  
  81. /*
  82.  * Tentative codes.
  83.  */
  84. LOCAL    char    m_grandadvance[]= "Grand Advance Technology LTD.";
  85. LOCAL    char    m_bestdisk[]    = "Bestdisc Technology Corporation";
  86. LOCAL    char    m_wealth_fair[]    = "WEALTH FAIR INVESTMENT LIMITE";
  87. LOCAL    char    m_general_mag[]    = "General Magnetics Ld";
  88. LOCAL    char    m_mpo[]        = "MPO";
  89. LOCAL    char    m_jvc[]        = "VICTOR COMPANY OF JAPAN, LIMITED";
  90. LOCAL    char    m_vivistar[]    = "VIVASTAR AG";
  91. LOCAL    char    m_taroko[]    = "TAROKO INTERNATIONAL CO.,LTD.";
  92. LOCAL    char    m_unidisc[]    = "UNIDISC TECHNOLOGY CO.,LTD";
  93. LOCAL    char    m_hokodig[]    = "Hong Kong Digital Technology Co., Ltd.";
  94. LOCAL    char    m_viva[]    = "VIVA MAGNETICS LIMITED";
  95. LOCAL    char    m_hile[]    = "Hile Optical Disc Technology Corp.";
  96. LOCAL    char    m_friendly[]    = "Friendly CD-Tek Co.";
  97. LOCAL    char    m_soundsound[]    = "Sound Sound Multi-Media Development Limited";
  98. LOCAL    char    m_kdg[]        = "kdg mediatech AG";
  99. LOCAL    char    m_seantram[]    = "Seantram Technology Inc.";
  100. LOCAL    char    m_eximpo[]    = "EXIMPO";
  101. LOCAL    char    m_delphi[]    = "DELPHI TECHNOLOGY INC.";
  102. LOCAL    char    m_harmonic[]    = "Harmonic Hall Optical Disc Ltd.";
  103. LOCAL    char    m_guannyinn[]    = "Guann Yinn Co.,Ltd.";
  104. LOCAL    char    m_optime[]    = "Opti.Me.S. S.p.A.";
  105. LOCAL    char    m_nacar[]    = "Nacar Media srl";
  106. LOCAL    char    m_optrom[]    = "OPTROM.INC.";
  107. LOCAL    char    m_audiodis[]    = "AUDIO DISTRIBUTORS CO., LTD.";
  108. LOCAL    char    m_acer[]    = "Acer Media Technology, Inc.";
  109. LOCAL    char    m_woongjin[]    = "Woongjin Media corp";
  110. LOCAL    char    m_infodisk[]    = "INFODISC Technology Co., Ltd.";
  111. LOCAL    char    m_unitech[]    = "UNITECH JAPAN INC.";
  112. LOCAL    char    m_ams[]        = "AMS Technology Inc.";
  113. LOCAL    char    m_vanguard[]    = "Vanguard Disc Inc.";
  114. LOCAL    char    m_grandadv[]    = "Grand Advance Technology Ltd.";
  115. LOCAL    char    m_digitalstor[]    = "DIGITAL STORAGE TECHNOLOGY CO.,LTD";
  116. LOCAL    char    m_matsushita[]    = "Matsushita Electric Industrial Co.,Ltd.";
  117. LOCAL    char    m_albrechts[]    = "CDA DatentrΣger Albrechts GmbH.";
  118. LOCAL    char    m_xalbrechts[]    = "??? CDA DatentrΣger Albrechts GmbH.";
  119.  
  120. LOCAL    char    m_prodisc[]    = "Prodisc Technology Inc.";
  121. LOCAL    char    m_postech[]    = "POSTECH Corporation";
  122. #ifdef    used
  123. LOCAL    char    m_ncolumbia[]    = "NIPPON COLUMBIA CO.,LTD.";
  124. #endif
  125. LOCAL    char    m_odc[]        = "OPTICAL DISC CORPRATION";
  126. LOCAL    char    m_sony[]    = "SONY Corporation";
  127. LOCAL    char    m_cis[]        = "CIS Technology Inc.";
  128. LOCAL    char    m_csitaly[]    = "Computer Support Italy s.r.l.";
  129. LOCAL    char    m_mmmm[]    = "Multi Media Masters & Machinary SA";
  130.  
  131. /*
  132.  * Guessed codes.
  133.  */
  134. /*LOCAL    char    m_seantram[]    = "Seantram Technology Inc.";*/
  135.  
  136. LOCAL    struct disk_man notable =
  137.     {{00, 00, 00},  -1, "unknown (not in table)" };
  138.  
  139. /*
  140.  * Old (illegal) code table. It lists single specific codes (97:xx:yy).
  141.  */
  142. LOCAL    struct disk_man odman[] = {
  143.     /*
  144.      * Illegal (old) codes.
  145.      */
  146.     {{97, 25, 00}, 80, "ILLEGAL OLD CODE: TDK ???" },
  147.     {{97, 25, 15},  0, m_ill },
  148.     {{97, 27, 00}, 81, "ILLEGAL OLD CODE: Old Ritek Co.???" },
  149.     {{97, 27, 25},  0, m_ill },
  150.     {{97, 30, 00},  0, m_ill },
  151.     {{97, 33, 00}, 82, "ILLEGAL OLD CODE: Old CDA DatentrΣger Albrechts GmbH." },
  152.     {{97, 35, 44},  0, m_ill },
  153.     {{97, 39, 00},  0, m_ill },
  154.     {{97, 45, 36}, 83, "ILLEGAL OLD CODE: Old Kodak Photo CD" },
  155.     {{97, 47, 00},  0, m_ill },
  156.     {{97, 47, 30},  0, m_ill },
  157.     {{97, 48, 14},  0, m_ill },
  158.     {{97, 48, 33},  0, m_ill },
  159.     {{97, 49, 00},  0, m_ill },
  160.     {{97, 54, 00},  0, m_ill },
  161.     {{97, 55, 06},  0, m_ill },
  162.     {{97, 57, 00},  0, m_ill },
  163.     /*
  164.      * List end marker
  165.      */
  166.     {{00, 00, 00}, 0, NULL },
  167. };
  168.  
  169. /*
  170.  * Actual code table. It lists code ranges (97:xx:y0 - 97:xx:y9).
  171.  *
  172.  * Note that dp->mi_msf.msf_frame needs to be always rounded down
  173.  * to 0 even for media that has e.g. 97:27/01 in the official table.
  174.  */
  175. LOCAL    struct disk_man dman[] = {
  176.     /*
  177.      * Permanent codes.
  178.      */
  179.  
  180.     {{97, 22, 10}, 53, m_seantram },
  181.     {{97, 15, 00}, 26, m_tdk },
  182.     {{97, 49, 30}, 47, m_optime },
  183.     {{97, 28, 00}, 47, m_optime },
  184.     {{97, 28, 40}, 36, m_kingpro },
  185.     {{97, 23, 60}, 49, m_custpo },
  186.     {{97, 29, 00}, 37, m_taeil },
  187.     {{97, 26, 10}, 19, m_postech },
  188.     {{97, 47, 40}, 19, m_postech },
  189.     {{97, 24, 10}, 24, m_sony },
  190. /*    {{97, 46, 10}, 24, m_sony },*/
  191.     {{97, 23, 10}, 33, m_doremi },
  192.     {{97, 25, 60}, 30, m_xcitec },
  193.     {{97, 45, 60}, 30, m_xcitec },
  194.     {{97, 26, 50}, 10, m_leaddata },
  195.     {{97, 48, 60}, 10, m_leaddata },
  196.     {{97, 26, 40},  6, m_fuji },
  197.     {{97, 46, 40},  6, m_fuji },
  198.     {{97, 25, 20},  8, m_hitachi },
  199.     {{97, 47, 10},  8, m_hitachi },
  200.     {{97, 27, 40},  9, m_kodakjp },
  201.     {{97, 48, 10},  9, m_kodakjp },
  202.     {{97, 27, 50}, 12, m_mitsui },
  203.     {{97, 48, 50}, 12, m_mitsui },
  204.     {{97, 27, 30}, 17, m_pioneer },
  205.     {{97, 48, 30}, 17, m_pioneer },
  206.     {{97, 27, 10}, 18, m_plasmon },
  207.     {{97, 48, 20}, 18, m_plasmon },
  208.     {{97, 27, 20}, 20, m_princo },
  209.     {{97, 47, 20}, 20, m_princo },
  210.     {{97, 27, 60}, 21, m_ricoh },
  211.     {{97, 48, 00}, 21, m_ricoh },
  212.     {{97, 26, 20}, 23, m_skc },
  213.     {{97, 24, 00}, 25, m_tyuden },
  214.     {{97, 46, 00}, 25, m_tyuden },
  215.     {{97, 32, 00}, 26, m_tdk },
  216.     {{97, 49, 00}, 26, m_tdk },
  217.     {{97, 34, 20}, 11, m_mitsubishi },
  218.     {{97, 50, 20}, 11, m_mitsubishi },
  219.     {{97, 28, 30},  1, m_auvistar },
  220.     {{97, 46, 50},  1, m_auvistar },
  221.     {{97, 28, 10},  7, m_gigastore },
  222.     {{97, 49, 10},  7, m_gigastore },
  223.     {{97, 26, 00},  5, m_fornet },
  224.     {{97, 45, 00},  5, m_fornet },
  225.     {{97, 26, 60},  3, m_cmc },
  226.     {{97, 46, 60},  3, m_cmc },
  227.     {{97, 21, 40}, 16, m_odm },
  228.     {{97, 31, 00}, 22, m_ritek },
  229.     {{97, 47, 50}, 22, m_ritek },
  230.     {{97, 28, 20}, 13, m_mmmm },
  231.     {{97, 46, 20}, 13, m_mmmm },
  232.     {{97, 32, 10}, 27, m_prodisc },
  233.  
  234.     /*
  235.      * Tentative codes.
  236.      */
  237.     {{97, 16, 30}, 68, m_grandadvance },
  238.     {{97, 21, 30}, 67, m_bestdisk },
  239.     {{97, 18, 10}, 66, m_wealth_fair },
  240.     {{97, 29, 50}, 65, m_general_mag },
  241.     {{97, 25, 00}, 64, m_mpo },        /* in reality 25/01    */
  242.     {{97, 49, 40}, 63, m_jvc },
  243.     {{97, 23, 40}, 63, m_jvc },
  244.     {{97, 25, 40}, 62, m_vivistar },
  245.     {{97, 18, 60}, 61, m_taroko },
  246.     {{97, 29, 20}, 60, m_unidisc },
  247.     {{97, 46, 10}, 59, m_hokodig },        /* XXX was m_sony */
  248.     {{97, 22, 50}, 59, m_hokodig },
  249.     {{97, 29, 40}, 58, m_viva },
  250.     {{97, 29, 30}, 57, m_hile },
  251.     {{97, 51, 50}, 57, m_hile },
  252.     {{97, 28, 60}, 56, m_friendly },
  253.     {{97, 21, 50}, 55, m_soundsound },
  254.     {{97, 24, 40}, 54, m_kdg },
  255.     {{97, 22, 30}, 52, m_eximpo },
  256.     {{97, 28, 50}, 51, m_delphi },
  257.     {{97, 29, 00}, 50, m_harmonic },
  258.     {{97, 15, 10}, 22, m_ritek },
  259.     {{97, 45, 50}, 48, m_guannyinn },
  260.     {{97, 24, 50}, 48, m_guannyinn },
  261.     {{97, 23, 20}, 46, m_nacar },
  262.     {{97, 23, 50}, 45, m_optrom },
  263.     {{97, 23, 30}, 44, m_audiodis },
  264.     {{97, 22, 60}, 43, m_acer },
  265.     {{97, 45, 20}, 43, m_acer },
  266.     {{97, 15, 20}, 11, m_mitsubishi },
  267.     {{97, 22, 00}, 39, m_woongjin },
  268.     {{97, 25, 30}, 40, m_infodisk },
  269.     {{97, 51, 20}, 40, m_infodisk },
  270.     {{97, 24, 30}, 41, m_unitech },
  271.     {{97, 25, 50}, 42, m_ams },
  272.     {{97, 29, 10}, 38, m_vanguard },
  273.     {{97, 50, 10}, 38, m_vanguard },
  274.     {{97, 31, 30}, 35, m_grandadv },
  275.     {{97, 51, 10}, 35, m_grandadv },
  276.     {{97, 49, 20}, 36, m_kingpro },
  277.     {{97, 27, 00}, 34, m_digitalstor },    /* in reality 27/01    */
  278.     {{97, 48, 40}, 34, m_digitalstor },    /* XXX was m_ncolumbia */
  279.     {{97, 23, 00}, 31, m_matsushita },
  280.     {{97, 49, 60}, 31, m_matsushita },
  281.     {{97, 30, 10}, 32, m_albrechts },    /* XXX was m_ncolumbia */
  282.     {{97, 50, 30}, 32, m_albrechts },
  283.     {{97, 47, 60}, 27, m_prodisc },
  284. /*    {{97, 30, 10}, 14, m_ncolumbia },*/
  285. /*    {{97, 48, 40}, 14, m_ncolumbia },*/
  286.     {{97, 26, 30}, 15, m_odc },
  287.     {{97, 22, 40},  2, m_cis },
  288.     {{97, 45, 40},  2, m_cis },
  289.     {{97, 24, 20},  4, m_csitaly },
  290.     {{97, 46, 30},  4, m_csitaly },
  291.  
  292.     /*
  293.      * Guessed codes.
  294.      */
  295.     {{97, 20, 10}, 32, m_xalbrechts },            /* XXX guess */
  296.     {{97, 23, 40}, 32, m_xalbrechts },            /* XXX guess */
  297.     {{97, 24, 40}, 29, "????? Princo Corporation" },    /* XXX guess */
  298.     {{97, 28, 00}, 28, "?????" },                /* XXX guess */
  299.  
  300.     /*
  301.      * List end marker
  302.      */
  303.     {{00, 00, 00},  0, NULL },
  304. };
  305.  
  306. LOCAL struct disk_man *
  307. man_ptr(mp)
  308.     msf_t    *mp;
  309. {
  310.     struct disk_man * dp;
  311.     int    frame;
  312.     int    type;
  313.  
  314.     type = mp->msf_frame % 10;
  315.     frame = mp->msf_frame - type;
  316.  
  317.     dp = odman;
  318.     while (dp->mi_msf.msf_min != 0) {
  319.         if (mp->msf_min == dp->mi_msf.msf_min &&
  320.                 mp->msf_sec == dp->mi_msf.msf_sec &&
  321.                 mp->msf_frame == dp->mi_msf.msf_frame) {
  322.             return (dp);
  323.         }
  324.         dp++;
  325.     }
  326.     dp = dman;
  327.     while (dp->mi_msf.msf_min != 0) {
  328.         if (mp->msf_min == dp->mi_msf.msf_min &&
  329.                 mp->msf_sec == dp->mi_msf.msf_sec &&
  330.                 frame == dp->mi_msf.msf_frame) {
  331.             /*
  332.              * Note that dp->mi_msf.msf_frame is always rounded
  333.              * down to 0 even for media that has 97:27/01 in the
  334.              * official table.
  335.              */
  336.             return (dp);
  337.         }
  338.         dp++;
  339.     }
  340.     return (NULL);
  341. }
  342.  
  343. EXPORT void
  344. pr_manufacturer(mp, rw, audio)
  345.     msf_t    *mp;
  346.     BOOL    rw;
  347.     BOOL    audio;
  348. {
  349.     struct disk_man * dp;
  350.     struct disk_man xdman;
  351.     int    type;
  352.     char    *tname;
  353.  
  354. /*    printf("pr_manufacturer rw: %d audio: %d\n", rw, audio);*/
  355.  
  356.     type = mp->msf_frame % 10;
  357.     if (type < 5) {
  358.         tname = "Long strategy type (Cyanine, AZO or similar)";
  359.     } else {
  360.         tname = "Short strategy type (Phthalocyanine or similar)";
  361.     }
  362.     if (rw) {
  363.         tname = "Phase change";
  364.     }
  365.  
  366.     dp = man_ptr(mp);
  367.     if (dp != NULL) {
  368.         if (dp->mi_num == 0 || dp->mi_num >= 80) {
  369.             if (!rw) {
  370.                 tname = "unknown";
  371.             } else {
  372.                 xdman = *dp;
  373.                 dp = &xdman;
  374.                 dp->mi_num = 0;
  375.                 dp->mi_name = m_illrw;
  376.             }
  377.         }
  378.     } else {
  379.         tname = "unknown";
  380.         dp = ¬able;
  381.     }
  382.     printf("Disk type:    %s\n", tname);
  383.     printf("Manuf. index: %d\n", dp->mi_num);
  384.     printf("Manufacturer: %s\n", dp->mi_name);
  385. }
  386.  
  387. EXPORT int
  388. manufacturer_id(mp)
  389.     msf_t    *mp;
  390. {
  391.     struct disk_man * dp;
  392.  
  393.     dp = man_ptr(mp);
  394.     if (dp != NULL)
  395.         return (dp->mi_num);
  396.     return (-1);
  397. }
  398.  
  399. struct disk_rcap {
  400.     msf_t    ci_msf;                /* Lead in start time         */
  401.     long    ci_cap;                /* Lead out start time         */
  402.     long    ci_rcap;            /* Abs max lead out start    */
  403. };
  404.  
  405. LOCAL    struct disk_rcap rcap[] = {
  406.  
  407. #ifdef    __redbook_only__
  408.     {{97, 35, 44}, 359849, 404700 },    /*! Unknown 99 min (89:58/00)*/
  409. #endif
  410.     {{97, 35, 44}, 359849, 449700 },    /*! Unknown 99 min (99:58/00)*/
  411.     {{97, 31, 00}, 359849, 368923 },    /*! Arita CD-R 80         */
  412.     {{97, 26, 50}, 359849, 369096 },    /*! Lead Data CD-R 80         */
  413.     {{97, 26, 12}, 359849, 368000 },    /*X POSTECH 80 Min         */
  414.     {{97, 25, 00}, 359849, 374002 },    /* TDK 80 Minuten         */
  415.     {{97, 20, 14}, 359700, 376386 },    /*! Albrechts DataFile Plus  */
  416.     {{97, 35, 44}, 359100, 368791 },    /*! NoName BC-1 700 Mb/80 Min */
  417.  
  418.     {{97, 26, 60}, 337350, 349030 },    /* Koch grⁿn CD-R74PRO         */
  419.     {{97, 26, 50}, 337050, 351205 },    /* Saba                 */
  420.     {{97, 26, 00}, 337050, 351411 },    /*!DGN (FORNET)             */
  421.     {{97, 22, 40}, 336631, 349971 },    /* Targa grⁿn CD-R74         */
  422.     {{97, 26, 50}, 336631, 351727 },    /*! Sunstar (Lead Data)         */
  423.     {{97, 26, 55}, 336631, 350474 },    /*! NoName ZAP (Lead Data)   */
  424.  
  425.     {{97, 27, 28}, 336601, 346489 },    /*! BTC CD-R (Princo)         */
  426.     {{97, 27, 30}, 336601, 351646 },    /*! Pioneer blau CDM-W74S     */
  427.     {{97, 27, 31}, 336601, 351379 },    /* Pioneer blau CDM-W74S     */
  428.     {{97, 27, 33}, 336601, 347029 },    /*! Pioneer braun CDM-V74S   */
  429.     {{97, 26, 40}, 336225, 346210 },    /* Fuji Silver Disk         */
  430.     {{97, 28, 10}, 336225, 348757 },    /*!GigaStorage Cursor CD-R   */
  431.     {{97, 31, 00}, 336225, 345460 },    /* Arita grⁿn             */
  432.     {{97, 25, 28}, 336075, 352879 },    /* Maxell gold CD-R74G         */
  433.     {{97, 24, 01}, 336075, 346856 },    /*!Philips Premium Silver    */
  434.     {{97, 24, 00}, 336075, 346741 },    /* Philips grⁿn CD-R74         */
  435.  
  436.     {{97, 22, 41}, 335206, 349385 },    /* Octek grⁿn             */
  437.     {{97, 34, 20}, 335100, 342460 },    /* Verbatim DataLifePlus     */
  438.     {{97, 33, 00}, 335100, 344634 },    /*!ITS Singapore (braun/grⁿn)*/
  439.     {{97, 32, 19}, 335100, 343921 },    /*!Prodisc silber/silber     */
  440.     {{97, 25, 21}, 335100, 346013 },    /* Maxell grⁿn CD-R74XL         */
  441.     {{97, 27, 00}, 335100, 353448 },    /* TDK grⁿn CD-RXG74         */
  442.     {{97, 27, 31}, 335100, 351862 },    /*!Maxell CD-R74MU (Musik)   */
  443.     {{97, 27, 33}, 335100, 351336 },    /* Pioneer RDD-74A         */
  444.  
  445.     {{97, 26, 60}, 334259, 349036 },    /* BASF grⁿn             */
  446.     {{97, 28, 21}, 333976, 348217 },    /*! Noname-B (MMMM)         */
  447.     {{97, 28, 20}, 333976, 346485 },    /* Koch  grⁿn  CD-R74 PRO    */
  448.     {{97, 32, 00}, 333975, 345736 },    /* Imation 3M             */
  449.     {{97, 32, 00}, 333975, 348835 },    /* TDK Reflex X     CD-R74   */
  450.     {{97, 30, 18}, 333899, 344857 },    /* HiSpace  grⁿn         */
  451.     {{97, 27, 66}, 333750, 352726 },    /*!Philips Megalife (Musik)  */
  452.     {{97, 28, 43}, 333750, 345344 },    /*!MMore CD-R             */
  453.     {{97, 27, 65}, 333750, 348343 },    /* Ricoh gold             */
  454.  
  455.     {{97, 27, 00}, 333750, 336246 },    /* BestMedia grⁿn   CD-R74   */
  456.     {{97, 27, 28}, 333491, 347473 },    /* Fuji grⁿn (alt)         */
  457.     {{97, 24, 48}, 333491, 343519 },    /* BASF (alt)             */
  458.     {{97, 27, 55}, 333235, 343270 },    /* Teac gold CD-R74         */
  459.     {{97, 27, 45}, 333226, 343358 },    /* Kodak gold             */
  460.     {{97, 28, 20}, 333226, 346483 },    /* SAST grⁿn             */
  461.     {{97, 27, 45}, 333226, 343357 },    /* Mitsumi gold             */
  462.     {{97, 28, 25}, 333226, 346481 },    /* Cedar Grⁿn             */
  463.     {{97, 23, 00}, 333226, 346206 },    /* Fuji grⁿn (alt)         */
  464.     {{97, 33, 00}, 333225, 349623 },    /* DataFile Albrechts         */
  465.     {{97, 24, 24}, 333198, 342536 },    /*!SUN CD Recordable         */
  466.  
  467.     {{97, 27, 19}, 332850, 348442 },    /* Plasmon gold PCD-R74         */
  468.     {{97, 32, 00}, 96600,  106502 },    /* TDK 80mm (for music only) */
  469.  
  470.     /*
  471.      * List end marker
  472.      */
  473.     {{00, 00, 00}, 0L, 0L },
  474. };
  475.  
  476. EXPORT long
  477. disk_rcap(mp, maxblock, rw, audio)
  478.     msf_t    *mp;
  479.     long    maxblock;
  480.     BOOL    rw;
  481.     BOOL    audio;
  482. {
  483.     struct disk_rcap * dp;
  484.  
  485.     dp = rcap;
  486.     while (dp->ci_msf.msf_min != 0) {
  487.         if (mp->msf_min == dp->ci_msf.msf_min &&
  488.                 mp->msf_sec == dp->ci_msf.msf_sec &&
  489.                 mp->msf_frame == dp->ci_msf.msf_frame &&
  490.                 maxblock == dp->ci_cap)
  491.             return (dp->ci_rcap);
  492.         dp++;
  493.     }
  494.     return (0L);
  495. }
  496.